package edu.nf.relaxenjoy.mapper;

import edu.nf.relaxenjoy.domain.dto.PostDTO;
import edu.nf.relaxenjoy.domain.entity.Post;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author zhu
 * @date 2024-12-10
 */
public interface PostMapper {

    /**
     * 查询所有发布状态的内容
     * @param pageNum 分页参数，第几页
     * @param pageSize 分页参数，每页几条
     * @param status 发布状态
     * @return 内容实体集合
     */
    List<Post> postList(@Param("pageNum") Long pageNum, @Param("pageSize") Long pageSize, @Param("status") Integer status);

    /**
     * 根据内容id查询
     * @param ids 内容id
     * @param status 内容状态
     * @return 内容实体集合
     */
    List<Post> listByIds(List<Long> ids, @Param("status") Integer status);

    /**
     * 根据用户id查询用户发布的内容
     * @param uid
     * @param status
     * @return
     */
    List<Post> getListByUid(@Param("uid") Long uid, @Param("status") Integer status);

    /**
     * 获取热榜图片
     * @param status
     * @return
     */
    List<Post> getHotList(@Param("status") Integer status);

    /**
     * 查询二级分类下的所有内容
     * @param pageNum
     * @param pageSize
     * @param categoryId
     * @return
     */
    List<Post> getPageByCategoryId(@Param("pageNum") Long pageNum, @Param("pageSize") Long pageSize, @Param("categoryId") Long categoryId);

    /**
     * 查询已经分类下的所有内容
     * @param pageNum
     * @param pageSize
     * @param categoryPid
     * @return
     */
    List<Post> getPageByCategoryPid(@Param("pageNum") Long pageNum, @Param("pageSize") Long pageSize, @Param("categoryPid") Long categoryPid);

    List<Post> getListByCategoryPid(@Param("pageNum") Long pageNum, @Param("pageSize") Long pageSize, @Param("categoryPid") Long categoryPid);

    /**
     * 根据内容id查询
     * @param id 内容id
     * @return 内容实体
     */
    Post getById(Long id);

    /**
     * 用于获取刚发布内容的id
     * @param postDTO
     * @return
     */
    Post getPost(PostDTO postDTO);

    /**
     * 修改内容信息
     * @param post 内容信息
     */
    void updateById(Post post);

    /**
     * 添加内容信息
     * @param post
     */
    void insert(Post post);

    /**
     * 删除内容
     * @param post
     */
    void remove(Post post);
}
